Basi di Dati — Appunti TiTilda

Indice

Basi di Dati

Capitolo Uno: Linguaggi Formali

1.1 Algebra Relazionale

L’algebra relazionale è un linguaggio procedurale, ovvero descrive la procedura da attuare per ottenere il risultato desiderato.

Operatori Algebra Relazionale

Gli operatori principali dell’algebra relazionale sono:

Da queste operazioni si possono derivare altre operazioni più complesse come:

Ottimizzazione delle Interrogazioni

Per ottimizzare le interrogazioni si possono seguire i seguenti passi:

  1. Eliminazione dei Prodotti Cartesiani: sostituire i prodotti cartesiani con i join. \sigma_{\text{P}}(R\times S) \Rightarrow (R\bowtie_{\text{P}} S)
  2. Push della Selezione: spostare le selezioni il più in basso possibile per ridurre il numero di tuple. \sigma_{\text{P}}(R\bowtie_{\text{Q}} S) \Rightarrow ((\sigma_{\text{P}}R)\bowtie_{\text{Q}} S)
  3. Push della Proiezione: spostare le proiezioni il più in basso possibile per ridurre il numero di attributi. \pi_{\text{A}}(R\bowtie_{\text{P}} S) \Rightarrow ((\pi_{\text{A}}R)\bowtie_{\text{P}} S)
  4. Idempotenza: è possibile scomporre i predicati delle operazioni di selezione e proiezione. \sigma_{\text{P}}(\sigma_{\text{Q}}R) \Rightarrow \sigma_{\text{P}\land\text{Q}}R \pi_{\text{A}}(\pi_{\text{A}\cap\text{B}}R) \Rightarrow \pi_{A}R
  5. Distributività: è possibile distribuire le operazioni di join rispetto alle unioni. R\bowtie_{\text{P}}(S\cup T) \Rightarrow (R\bowtie_{\text{P}}S)\cup(R\bowtie_{\text{P}}T)

Uno dei principi base è quello di minimizzare la dimensione dei risultati intermedi

1.2 Calcolo Relazionale

Il calcolo relazionale è un linguaggio dichiarativo, ovvero descrive il risultato desiderato senza specificare la procedura.

Le interrogazioni sono della forma:

\{t\ |\ P(t)\}

dove t è una tupla e P(t) è una formula che restituisce vero o falso. Se P(t) è vero, la tupla t viene restituita.

P(t) può essere composta da:

Operatori Calcolo Relazionale

Tramite questi operatori si possono costruire i seguenti operatori:

1.3 Datalog

Datalog è un linguaggio dichiarativo basato su prolog. Datalog ha un potere espressivo maggiore rispetto al calcolo relazionale, in quanto permette di definire regole ricorsive.

Si basa sull’idea di creare delle regole che definiscono delle viste. Le regole sono composte da un head (LHS) e un body (RHS) e sono della formula:

p\ \text{:-} \ p_1,\ p_2

dove ogni p è un letterale ed è un istanza di un predicato composto da:

Le regole sono interpretate come implicazioni logiche.

Un esempio di regola è:

\text{Padre}(X, Y)\ \text{:-}\ \text{Persona}(X, \_, \text{'M'}), \ \text{Genitori}(X,Y)

In datalog si definiscono due tipologie di database:

Le query possono essere fatti sull’intera base di dati (EDB + IDB). La query termina con i Goal, ovvero i predicati che si vogliono verificare.

\text{?-}\ \text{Padre}(\text{'Andrea'}, \text{'Marco'})

Operatori Datalog

Gli operatori principali di Datalog sono:

In datalog è possibile definire regole ricorsive, ma bisogna definire un’inizio prima del passo induttivo.

\text{P}(X, Y)\ \text{:-}\ \text{R}(X, Y) \text{P}(X, Y)\ \text{:-}\ \text{R}(X, Z), \ \text{P}(Z, Y)

Il passo induttivo continua finché non si raggiunge un punto fisso, ovvero non si hanno più nuovi fatti.

Ultima modifica:
Scritto da: Andrea Lunghi